home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / graphics / pstricks / inputs / pstricks.tex (.txt) < prev    next >
LaTeX Document  |  1993-04-07  |  56KB  |  1,974 lines

  1. %% BEGIN: pstricks.tex
  2. %% Generated on <1993/3/12> from `pstricks.doc'.
  3. %% For use with the PostScript header file `pstricks.pro'.
  4. \def\fileversion{0.93a}
  5. \def\filedate{93/03/12}
  6. %% See the PSTricks read-me file and the User's Guide for documentation.
  7. %% COPYRIGHT 1993, by Timothy Van Zandt, tvz@Princeton.EDU
  8. %% Copying of part or all of any file in the pstricks.tex package
  9. %% is allowed under the following conditions only:
  10. %% (1) You may freely distribute unchanged copies of the files. Please
  11. %% include the documentation when you do so.
  12. %% (2) You may modify a renamed copy of any file, but only for personal
  13. %% use or use within an organization.
  14. %% (3) You may copy fragments from the files, for personal use or for use
  15. %% in a macro package for distribution, as long as credit is given
  16. %% where credit is due.
  17. %% You are NOT ALLOWED to take money for the distribution or use of
  18. %% these files or modified versions or fragments thereof, except for
  19. %% a nominal charge for copying etc.
  20. \csname PSTricksLoaded\endcsname
  21. \let\PSTricksLoaded\endinput
  22. \edef\PstAtCode{\the\catcode`\@}
  23. \catcode`\@=11\relax
  24. \expandafter\ifx\csname @latexerr\endcsname\relax
  25. \long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
  26. #1\endcsname\relax#2\else#3\fi}
  27. \def\@namedef#1{\expandafter\def\csname #1\endcsname}
  28. \def\@nameuse#1{\csname #1\endcsname}
  29. \def\@eha{%
  30. Your command was ignored.^^J
  31. Type \space I <command> <return> \space to replace
  32. it with another command,^^J
  33. or \space <return> \space to continue without it.}
  34. \def\@spaces{\space\space\space\space}
  35. \def\typeout#1{\immediate\write\@unused{#1}}
  36. \alloc@7\write\chardef\sixt@@n\@unused
  37. \def\@empty{}
  38. \def\@gobble#1{}
  39. \def\@nnil{\@nil}
  40. \def\@ifnextchar#1#2#3{%
  41. \let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch}
  42. \def\@ifnch{%
  43. \ifx\@tempc\@sptoken
  44. \let\@tempd\@xifnch
  45. \else
  46. \ifx\@tempc\@tempe \let\@tempd\@tempa \else \let\@tempd\@tempb \fi
  47. \@tempd}
  48. \begingroup
  49. \def\:{\global\let\@sptoken= } \:
  50. \def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch}
  51. \endgroup
  52. \typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz)}
  53. \def\@pstrickserr#1#2{%
  54. \begingroup
  55. \newlinechar`\^^J
  56. \edef\pst@tempc{#2}%
  57. \expandafter\errhelp\expandafter{\pst@tempc}%
  58. \typeout{%
  59. PSTricks error. \space See User's Guide for further information.^^J
  60. \@spaces\@spaces\@spaces\@spaces
  61. Type \space H <return> \space for immediate help.}%
  62. \errmessage{#1}%
  63. \endgroup}
  64. \def\@ehpa{%
  65. Your command was ignored. Default value substituted.^^J
  66. Type \space <return> \space to procede.}
  67. \def\@ehpb{%
  68. Your command was ignored. Will recover best I can.^^J
  69. Type \space <return> \space to procede.}
  70. \def\@ehpc{%
  71. You better fix this before proceding.^^J
  72. See the PSTricks User's Guide or ask your system administrator for help.^^J
  73. Type \space X <return> \space to quit.}
  74. \def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb}
  75. \newdimen\pst@dima
  76. \newdimen\pst@dimb
  77. \newdimen\pst@dimc
  78. \newdimen\pst@dimd
  79. \newdimen\pst@dimg
  80. \newdimen\pst@dimh
  81. \newbox\pst@hbox
  82. \newbox\pst@boxg
  83. \newcount\pst@cnta
  84. \newcount\pst@cntb
  85. \newcount\pst@cntc
  86. \newcount\pst@cntd
  87. \newcount\pst@cntg
  88. \newcount\pst@cnth
  89. \newif\if@pst
  90. \newif\if@star
  91. \def\pst@ifstar#1{%
  92. \@ifnextchar*{\@startrue\def\next*{#1}\next}{\@starfalse#1}}
  93. \def\pst@expandafter#1#2{%
  94. \def\next{#1}%
  95. \edef\@tempa{#2}%
  96. \ifx\@tempa\@empty
  97. \@pstrickserr{Unexpected empty argument!}\@ehpb
  98. \def\@tempa{\@empty}%
  99. \expandafter\next\@tempa}
  100. \def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}}
  101. \def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1}
  102. {\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}}
  103. \def\pst@pyth#1#2#3{%
  104. \ifdim#1>#2\pst@@pyth#1#2#3\else\pst@@pyth#2#1#3\fi}
  105. \def\pst@@pyth#1#2#3{%
  106. \ifdim4#1>9#2%
  107. #3=#1\advance#3 .2122#2%
  108. \else
  109. #3=.8384#1\advance#3 .5758#2%
  110. \def\pst@divide#1#2#3{%
  111. \begingroup
  112. \pst@dimg=#1\relax\pst@dimh=#2\relax
  113. \pst@cnta=\pst@dimg
  114. \pst@cntb=1073741824
  115. \pst@cntc=65536
  116. \def\pst@tempa{\fi\ifnum}%
  117. \loop\ifnum\pst@cnta<\pst@cntb
  118. \pst@tempa\pst@cntc>\@ne
  119. \multiply\pst@cnta2\divide\pst@cntc2
  120. \repeat
  121. \divide\pst@dimh\pst@cntc
  122. \divide\pst@cnta\pst@dimh
  123. \global\pst@dimg\number\pst@cnta sp
  124. \endgroup
  125. \pst@dimtonum\pst@dimg#3}
  126. \def\pst@configerr#1{%
  127. \@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc}
  128. % % \begin{macrocode}
  129. \def\pstVerb#1{\pst@configerr\pstVerb}
  130. \def\pstverb#1{\pst@configerr\pstverb}
  131. \def\pstverbscale{\pst@configerr\pstverbscale}
  132. \def\pstrotate{\pst@configerr\pstrotate}
  133. \def\pstheader#1{\pst@configerr\pstheader}
  134. \def\pstdriver{\pst@configerr\pstdriver}
  135. \@ifundefined{pstcustomize}%
  136. {\def\pstcustomize{\endinput\let\pstcustomize\relax}}{}
  137. \input pstricks.con
  138. \newif\ifPSTricks
  139. \PSTrickstrue
  140. \def\PSTricksOff{%
  141. \def\pstheader##1{}%
  142. \def\pstverb##1{}%
  143. \def\pstVerb##1{}%
  144. \PSTricksfalse}
  145. \@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{}
  146. \@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{}
  147. \pstheader{pstricks.pro}
  148. \def\pst@dict{tx@Dict begin }
  149. \def\pst@theheaders{pstricks.pro}
  150. \def\pst@Verb#1{\pstVerb{\pst@dict #1 end}}
  151. \def\tx@Atan{Atan }
  152. \def\tx@Div{Div }
  153. \def\tx@NET{NET }
  154. \def\tx@Pyth{Pyth }
  155. \def\tx@PtoC{PtoC }
  156. \def\tx@PathLength@{PathLength@ }
  157. \def\tx@PathLength{PathLength }
  158. \pst@dimg=\pstunit\relax
  159. \ifdim\pst@dimg=1bp
  160. \def\pst@stp{.996264 dup scale}
  161. \else
  162. \edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale}
  163. \def\tx@STP{STP }
  164. \def\tx@STV{STV }
  165. \def\pst@number#1{\pst@@dimtonum#1\space}
  166. \def\pst@checknum#1#2{%
  167. \edef\next{#1}%
  168. \ifx\next\@empty
  169. \let\pst@num\z@
  170. \else
  171. \expandafter\pst@@checknum\next..\@nil
  172. \ifnum\pst@num=\z@
  173. \@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa
  174. \def#2{0 }%
  175. \else
  176. \edef#2{\ifnum\pst@num=2 -\fi\the\pst@cntg.%
  177. \expandafter\@gobble\the\pst@cnth\space}%
  178. \def\pst@@checknum{%
  179. \@ifnextchar-%
  180. {\def\pst@num{2}\expandafter\pst@@@checknum\@gobble}%
  181. {\def\pst@num{1}\pst@@@checknum}}
  182. \def\pst@@@checknum#1.#2.#3\@nil{%
  183. \afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil
  184. \afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil}
  185. \def\pst@@@@checknum#1\relax\@nil{%
  186. \ifx\@nil#1\@nil\else\let\pst@num\z@\fi}
  187. \def\pst@getnumii#1 #2 #3\@nil{%
  188. \pst@checknum{#1}\pst@tempg
  189. \pst@checknum{#2}\pst@temph}
  190. \def\pst@getnumiii#1 #2 #3 #4\@nil{%
  191. \pst@checknum{#1}\pst@tempg
  192. \pst@checknum{#2}\pst@temph
  193. \pst@checknum{#3}\pst@tempi}
  194. \def\pst@getnumiv#1 #2 #3 #4 #5\@nil{%
  195. \pst@checknum{#1}\pst@tempg
  196. \pst@checknum{#2}\pst@temph
  197. \pst@checknum{#3}\pst@tempi
  198. \pst@checknum{#4}\pst@tempj}
  199. \def\pst@getdimnum#1 #2 #3\@nil{%
  200. \pssetlength\pst@dimg{#1}%
  201. \pst@checknum{#2}\pst@tempg}
  202. \def\pst@getscale#1#2{%
  203. \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
  204. \edef#2{\pst@tempg\space \pst@temph\space scale }%
  205. \ifdim\pst@tempg\p@=\z@
  206. \@pstrickserr{Bad scaling argument `#1'}\@ehpa
  207. \def#2{}%
  208. \else
  209. \ifdim\pst@temph\p@=\z@
  210. \@pstrickserr{Bad scaling argument}\@ehpa
  211. \def#2{}%
  212. \else
  213. \ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@ \def#2{}\fi\fi
  214. \def\pst@getint#1#2{%
  215. \pst@cntg=#1\relax
  216. \edef#2{\the\pst@cntg\space}}
  217. \begingroup
  218. \catcode`\{=12
  219. \catcode`\}=12
  220. \catcode`\[=1
  221. \catcode`\]=2
  222. \gdef\pslbrace[{ ]
  223. \gdef\psrbrace[} ]
  224. \endgroup
  225. \def\@newcolor#1#2{%
  226. \expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}%
  227. \expandafter\edef\csname color@#1\endcsname{#2}%
  228. \ignorespaces}
  229. \def\pst@color#1{%
  230. \def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor}
  231. \def\pst@endcolor{\pstVerb{\pst@currentcolor}}
  232. \def\pst@currentcolor{0 setgray}
  233. \def\altcolormode{%
  234. \def\pst@color##1{%
  235. \pstVerb{gsave ##1}\aftergroup\pst@endcolor}%
  236. \def\pst@endcolor{\pstVerb{\pst@grestore}}}
  237. \def\pst@grestore{%
  238. currentpoint
  239. matrix currentmatrix
  240. currentfont
  241. grestore
  242. setfont
  243. setmatrix
  244. moveto}
  245. \def\pst@usecolor#1{\csname color@#1\endcsname\space}
  246. \def\newgray#1#2{%
  247. \pst@checknum{#2}\pst@tempg
  248. \@newcolor{#1}{\pst@tempg setgray}}
  249. \def\newrgbcolor#1#2{%
  250. \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
  251. \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}}
  252. \def\newhsbcolor#1#2{%
  253. \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
  254. \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}}
  255. \def\newcmykcolor#1#2{%
  256. \pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil
  257. \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}}
  258. \newgray{black}{0}
  259. \newgray{darkgray}{.25}
  260. \newgray{gray}{.5}
  261. \newgray{lightgray}{.75}
  262. \newgray{white}{1}
  263. \newrgbcolor{red}{1 0 0}
  264. \newrgbcolor{green}{0 1 0}
  265. \newrgbcolor{blue}{0 0 1}
  266. \newrgbcolor{yellow}{1 1 0}
  267. \newrgbcolor{cyan}{0 1 1}
  268. \newrgbcolor{magenta}{1 0 1}
  269. \def\psset#1{\@psset#1,\@nil\ignorespaces}
  270. \def\@psset#1,{%
  271. \@@psset#1==\@nil
  272. \@ifnextchar\@nil{\@gobble}{\@psset}}
  273. \def\@@psset#1=#2=#3\@nil{%
  274. \@ifundefined{psset@#1}%
  275. {\@pstrickserr{Graphics parameter `#1' not defined.}\@ehpa}%
  276. {\@nameuse{psset@#1}{#2}}}%
  277. \def\psset@style#1{%
  278. \@ifundefined{pscs@#1}%
  279. {\@pstrickserr{Custom style `#1' undefined}\@ehpa}%
  280. {\@nameuse{pscs@#1}}}
  281. \def\newpsstyle#1#2{\@namedef{pscs@#1}{\psset{#2}}}
  282. \def\@none{none}
  283. \def\pst@getcolor#1#2{%
  284. \@ifundefined{color@#1}%
  285. {\@pstrickserr{Color `#1' not defined}\@eha}%
  286. {\edef#2{#1}}}
  287. \newdimen\psunit \psunit 1cm
  288. \newdimen\psxunit \psxunit 1cm
  289. \newdimen\psyunit \psyunit 1cm
  290. \let\psrunit\psunit
  291. \def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces}
  292. \def\pssetlength#1#2{%
  293. \let\@psunit\psunit
  294. \afterassignment\pstunit@off
  295. #1 #2\@psunit}
  296. \def\psaddtolength#1#2{%
  297. \let\@psunit\psunit
  298. \afterassignment\pstunit@off
  299. \advance#1 #2\@psunit}
  300. \def\pssetxlength#1#2{%
  301. \let\@psunit\psxunit
  302. \afterassignment\pstunit@off
  303. #1 #2\@psunit}
  304. \def\pssetylength#1#2{%
  305. \let\@psunit\psyunit
  306. \afterassignment\pstunit@off
  307. #1 #2\@psunit}
  308. \def\psset@unit#1{%
  309. \pssetlength\psunit{#1}%
  310. \psxunit=\psunit
  311. \psyunit=\psunit}
  312. \def\psset@runit#1{\pssetlength\psrunit{#1}}
  313. \def\psset@xunit#1{\pssetxlength\psxunit{#1}}
  314. \def\psset@yunit#1{\pssetylength\psyunit{#1}}
  315. \def\pst@getlength#1#2{%
  316. \pssetlength\pst@dimg{#1}%
  317. \edef#2{\pst@number\pst@dimg}}
  318. \def\pst@@getlength#1#2{%
  319. \pssetlength\pst@dimg{#1}%
  320. \edef#2{\number\pst@dimg sp}}
  321. \def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor}
  322. \def\pst@coor{0 0 }
  323. \def\pst@getcoors#1#2{%
  324. \def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}%
  325. \def\pst@coors{}%
  326. \pst@@getcoors}
  327. \def\pst@@getcoors(#1){%
  328. \pst@@getcoor{#1}%
  329. \edef\pst@coors{\pst@coor\pst@coors}%
  330. \@ifnextchar({\pst@@getcoors}{\pst@aftercoors}}
  331. \def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle}
  332. \def\pst@angle{0 }
  333. \def\cartesian@coor#1,#2,#3\@nil{%
  334. \pssetxlength\pst@dimg{#1}%
  335. \pssetylength\pst@dimh{#2}%
  336. \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}
  337. \def\NormalCoor{%
  338. \def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}%
  339. \def\pst@@getangle##1{%
  340. \pst@checknum{##1}\pst@angle
  341. \edef\pst@angle{\pst@angle \pst@angleunit}}%
  342. \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}}
  343. \NormalCoor
  344. \def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}}
  345. \def\@degrees[#1]{%
  346. \pst@checknum{#1}\pst@tempg
  347. \edef\pst@angleunit{360 \pst@tempg div mul }%
  348. \ignorespaces}
  349. \def\radians{\def\pst@angleunit{57.2956 mul }}
  350. \def\pst@angleunit{}
  351. \def\SpecialCoor{%
  352. \def\pst@@getcoor##1{\pst@expandafter\special@coor{##1}||\@nil}%
  353. \def\pst@@getangle##1{\pst@expandafter\special@angle{##1}\@empty)\@nil}%
  354. \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}}
  355. \def\special@coor#1|#2|#3\@nil{%
  356. \ifx#3|\relax
  357. \mixed@coor{#1}{#2}%
  358. \else
  359. \special@@coor#1;;\@nil
  360. \def\special@@coor#1{%
  361. \ifcat#1a\relax
  362. \def\next{\node@coor#1}%
  363. \else
  364. \ifx#1[\relax
  365. \def\next{\Node@coor[}%
  366. \else
  367. \ifx#1!\relax
  368. \def\next{\raw@coor}%
  369. \else
  370. \def\next{\special@@@coor#1}%
  371. \next}
  372. \def\special@@@coor#1;#2;#3\@nil{%
  373. \ifx#3;\relax
  374. \polar@coor{#1}{#2}%
  375. \else
  376. \cartesian@coor#1,\relax,\@nil
  377. \def\mixed@coor#1#2{%
  378. \begingroup
  379. \specialcoor@ii#1;;\@nil
  380. \let\pst@tempa\pst@coor
  381. \specialcoor@ii#2;;\@nil
  382. \xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }%
  383. \endgroup
  384. \let\pst@coor\pst@tempg}
  385. \def\polar@coor#1#2{%
  386. \pssetlength\pst@dimg{#1}%
  387. \pst@@getangle{#2}%
  388. \edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}}
  389. \def\raw@coor#1;#2\@nil{%
  390. \edef\pst@coor{%
  391. #1 \pst@number\psyunit mul exch \pst@number\psxunit mul exch }}
  392. \def\node@coor#1\@nil{%
  393. \@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps
  394. \def\pst@coor{0 0 }}
  395. \def\Node@coor{\node@coor}
  396. \def\special@angle#1#2)#3\@nil{%
  397. \ifx#1!\relax
  398. \edef\pst@angle{#2 \pst@angleunit}%
  399. \else
  400. \ifx#1(\relax
  401. \pst@@getcoor{#2}%
  402. \edef\pst@angle{\pst@coor exch \tx@Atan}%
  403. \else
  404. \pst@checknum{#1#2}\pst@angle
  405. \edef\pst@angle{\pst@angle \pst@angleunit}%
  406. \def\Cartesian{%
  407. \def\cartesian@coor##1,##2,##3\@nil{%
  408. \pssetxlength\pst@dimg{##1}%
  409. \pssetylength\pst@dimh{##2}%
  410. \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}%
  411. \@ifnextchar({\Cartesian@}{}}
  412. \def\Cartesian@(#1,#2){%
  413. \pssetxlength\psxunit{#1}%
  414. \pssetylength\psyunit{#2}%
  415. \ignorespaces}
  416. \def\Polar{%
  417. \def\psput@cartesian{\psput@special}%
  418. \def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}}%
  419. \def\psset@origin#1{%
  420. \pst@@getcoor{#1}%
  421. \edef\psk@origin{\pst@coor \tx@NET }}
  422. \def\psk@origin{}
  423. \newif\ifswapaxes
  424. \def\psset@swapaxes#1{%
  425. \@nameuse{@pst#1}%
  426. \if@pst
  427. \def\psk@swapaxes{-90 rotate -1 1 scale }%
  428. \else
  429. \def\psk@swapaxes{}%
  430. \psset@swapaxes{false}
  431. \newif\ifshowpoints
  432. \def\psset@showpoints#1{\@nameuse{showpoints#1}}
  433. \psset@showpoints{false}
  434. \let\pst@setrepeatarrowsflag\relax
  435. \def\psset@border#1{%
  436. \pst@getlength{#1}\psk@border
  437. \pst@setrepeatarrowsflag}
  438. \psset@border{0pt}
  439. \def\psset@bordercolor#1{\pst@getcolor{#1}\psbordercolor}
  440. \psset@bordercolor{white}
  441. \newif\ifpsdoubleline
  442. \def\psset@doubleline#1{%
  443. \@nameuse{psdoubleline#1}%
  444. \pst@setrepeatarrowsflag}
  445. \psset@doubleline{false}
  446. \def\psset@doublesep#1{\def\psdoublesep{#1}}
  447. \psset@doublesep{1.25\pslinewidth}
  448. \def\psset@doublecolor#1{\pst@getcolor{#1}\psdoublecolor}
  449. \psset@doublecolor{white}
  450. \newif\ifpsshadow
  451. \def\psset@shadow#1{%
  452. \@nameuse{psshadow#1}%
  453. \pst@setrepeatarrowsflag}
  454. \psset@shadow{false}
  455. \def\psset@shadowsize#1{\pst@getlength{#1}\psk@shadowsize}
  456. \psset@shadowsize{3pt}
  457. \def\psset@shadowangle#1{\pst@getangle{#1}\psk@shadowangle}
  458. \psset@shadowangle{-45}
  459. \def\psset@shadowcolor#1{\pst@getcolor{#1}\psshadowcolor}
  460. \psset@shadowcolor{darkgray}
  461. \def\pst@repeatarrowsflag{\z@}
  462. \def\pst@setrepeatarrowsflag{%
  463. \edef\pst@repeatarrowsflag{%
  464. \ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else
  465. \ifpsshadow 1\else \z@\fi\fi\fi}}
  466. \def\psls@none{}
  467. \newdimen\pslinewidth
  468. \def\psset@linewidth#1{\pssetlength\pslinewidth{#1}}
  469. \psset@linewidth{.8pt}
  470. \def\psset@linecolor#1{\pst@getcolor{#1}\pslinecolor}
  471. \psset@linecolor{black}
  472. \def\psls@solid{0 setlinecap stroke }
  473. \def\psset@dash#1{%
  474. \pst@expandafter\psset@@dash{#1} * * *\@nil
  475. \edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh}}
  476. \def\psset@@dash#1 #2 #3\@nil{%
  477. \pssetlength\pst@dimg{#1}%
  478. \pssetlength\pst@dimh{#2}}
  479. \psset@dash{5pt 3pt}
  480. \def\psls@dashed{\psk@dash \pst@linetype\space \tx@DashLine}
  481. \def\tx@DashLine{DashLine }
  482. \def\psset@dotsep#1{\pst@getlength{#1}\psk@dotsep}
  483. \psset@dotsep{3pt}
  484. \def\psls@dotted{\psk@dotsep \pst@linetype\space \tx@DotLine}%
  485. \def\tx@DotLine{DotLine }
  486. \def\psset@linestyle#1{%
  487. \@ifundefined{psls@#1}%
  488. {\@pstrickserr{Line style `#1' not defined}\@eha}%
  489. {\edef\pslinestyle{#1}}}
  490. \psset@linestyle{solid}
  491. \def\psfs@none{}
  492. \def\psset@fillcolor#1{\pst@getcolor{#1}\psfillcolor}
  493. \psset@fillcolor{white}
  494. \def\psfs@solid{\pst@usecolor\psfillcolor fill }
  495. \def\psset@hatchwidth#1{\pst@getlength{#1}\psk@hatchwidth}
  496. \psset@hatchwidth{.8pt}
  497. \def\psset@hatchsep#1{\pst@getlength{#1}\psk@hatchsep}
  498. \psset@hatchsep{4pt}
  499. \def\psset@hatchcolor#1{\pst@getcolor{#1}\pshatchcolor}
  500. \psset@hatchcolor{black}
  501. \def\psset@hatchangle#1{\pst@getangle{#1}\psk@hatchangle}
  502. \psset@hatchangle{45}
  503. \def\psfs@hlines{%
  504. \psk@hatchangle rotate
  505. \psk@hatchwidth SLW
  506. \pst@usecolor\pshatchcolor
  507. \psk@hatchsep \tx@LineFill}
  508. \@namedef{psfs@hlines*}{gsave \psfs@solid grestore \psfs@hlines}
  509. \def\tx@LineFill{LineFill }
  510. \def\tx@LineFill{LineFill }
  511. \def\psfs@vlines{%
  512. 90 rotate
  513. \psfs@hlines}
  514. \@namedef{psfs@vlines*}{gsave \psfs@solid grestore \psfs@vlines}
  515. \def\psfs@crosshatch{gsave \psfs@hlines grestore \psfs@vlines}
  516. \@namedef{psfs@crosshatch*}{%
  517. gsave \psfs@solid grestore
  518. gsave \psfs@hlines grestore
  519. \psfs@vlines}
  520. \def\psset@fillstyle#1{%
  521. \@ifundefined{psfs@#1}%
  522. {\@pstrickserr{Undefined fill style: `#1'}\@eha}%
  523. {\edef\psfillstyle{#1}}}
  524. \psset@fillstyle{none}
  525. \def\psset@arrows#1{%
  526. \begingroup
  527. \pst@activearrows
  528. \xdef\pst@tempg{#1}%
  529. \endgroup
  530. \expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil
  531. \if@pst\else
  532. \@pstrickserr{Bad arrows specification: #1}\@ehpa
  533. \def\psset@@arrows#1-#2\@empty#3\@nil{%
  534. \@psttrue
  535. \def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}%
  536. \expandafter\next\pst@arrowtable,#1-#1,\@nil
  537. \@ifundefined{psas@\pst@tempg}%
  538. {\@pstfalse\def\psk@arrowA{}}%
  539. {\let\psk@arrowA\pst@tempg}%
  540. \@ifundefined{psas@#2}%
  541. {\@pstfalse\def\psk@arrowB{}}%
  542. {\def\psk@arrowB{#2}}}
  543. \def\psk@arrowA{}
  544. \def\psk@arrowB{}
  545. \def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-]}
  546. \begingroup
  547. \catcode`\<=13
  548. \catcode`\>=13
  549. \catcode`\|=13
  550. \gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}}
  551. \endgroup
  552. \def\tx@BeginArrow{BeginArrow }
  553. \def\tx@EndArrow{EndArrow }
  554. \def\psset@arrowscale#1{\pst@getscale{#1}\psk@arrowscale}
  555. \psset@arrowscale{1}
  556. \def\psset@arrowsize#1{%
  557. \pst@expandafter\pst@getdimnum{#1} {} {} {}\@nil
  558. \edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}}
  559. \psset@arrowsize{2pt 3}
  560. \def\psset@arrowlength#1{\pst@checknum{#1}\psk@arrowlength}
  561. \psset@arrowlength{1.4}
  562. \def\psset@arrowinset#1{\pst@checknum{#1}\psk@arrowinset}%
  563. \psset@arrowinset{.4}
  564. \def\tx@Arrow{Arrow }
  565. \@namedef{psas@>}{%
  566. false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
  567. \@namedef{psas@>>}{%
  568. false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
  569. 0 h T
  570. gsave
  571. newpath
  572. false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
  573. grestore
  574. CP newpath moveto
  575. 2 copy
  576. stroke
  577. moveto}
  578. \@namedef{psas@<}{%
  579. true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
  580. \@namedef{psas@<<}{%
  581. true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
  582. CP newpath moveto 0 a neg L stroke 0 h neg T
  583. false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
  584. \def\psset@tbarsize#1{%
  585. \pst@expandafter\pst@getdimnum{#1} {} {} {}\@nil
  586. \edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}}
  587. \psset@tbarsize{2pt 5}
  588. \def\tx@Tbar{Tbar }
  589. \@namedef{psas@|}{\psk@tbarsize \tx@Tbar}
  590. \@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar}
  591. \def\psset@bracketlength#1{\pst@checknum{#1}\psk@bracketlength}
  592. \psset@bracketlength{.15}
  593. \def\tx@Bracket{Bracket }
  594. \@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket}
  595. \def\psset@rbracketlength#1{\pst@checknum{#1}\psk@rbracketlength}
  596. \psset@rbracketlength{.15}
  597. \def\tx@RoundBracket{RoundBracket }
  598. \@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket}
  599. \def\psas@c{1 \psas@@c}
  600. \def\psas@cc{0 CLW 2 div T 1 \psas@@c}
  601. \def\psas@C{2 \psas@@c}
  602. \def\psas@@c{%
  603. setlinecap
  604. 0 0 moveto
  605. 0 CLW 2 div L
  606. stroke
  607. 0 0 moveto}
  608. \def\psas@{}
  609. \psset@arrows{-}
  610. \def\pst@par{}
  611. \def\addto@par#1{%
  612. \ifx\pst@par\@empty
  613. \def\pst@par{#1}%
  614. \else
  615. \expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}%
  616. \def\use@par{%
  617. \ifx\pst@par\@empty\else
  618. \expandafter\@psset\pst@par,\@nil
  619. \def\pst@par{}%
  620. \def\pst@object#1{%
  621. \pst@ifstar{\@ifnextchar[{\pst@@object{#1}}{\@nameuse{#1@i}}}}
  622. \def\pst@@object#1[#2]{%
  623. \addto@par{#2}\@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}}
  624. \def\newpsobject#1#2#3{%
  625. \@ifundefined{#2@i}%
  626. {\@pstrickserr{Graphics object `#2' not defined}\@eha}%
  627. {\@namedef{#1}{\def\pst@par{#3}\pst@object{#2}}}\ignorespaces}
  628. \def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}}
  629. \def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1}
  630. \def\begin@ClosedObj{%
  631. \leavevmode
  632. \pst@killglue
  633. \begingroup
  634. \use@par
  635. \solid@star
  636. \ifpsdoubleline \pst@setdoublesep \fi
  637. \init@pscode}
  638. \def\end@ClosedObj{%
  639. \ifpsshadow \pst@closedshadow \fi
  640. \ifdim\psk@border\p@>\z@ \pst@addborder \fi
  641. \pst@fill
  642. \pst@stroke
  643. \ifpsdoubleline \pst@doublestroke \fi
  644. \ifshowpoints
  645. \addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}%
  646. \use@pscode
  647. \endgroup
  648. \ignorespaces}
  649. \def\begin@OpenObj{%
  650. \begin@ClosedObj
  651. \let\pst@linetype\pst@arrowtype
  652. \pst@addarrowdef}
  653. \def\begin@AltOpenObj{%
  654. \begin@ClosedObj
  655. \def\pst@repeatarrowsflag{\z@}%
  656. \def\pst@linetype{0}}
  657. \def\end@OpenObj{%
  658. \ifpsshadow \pst@openshadow \fi
  659. \ifdim\psk@border\p@>\z@ \pst@addborder \fi
  660. \pst@fill
  661. \pst@stroke
  662. \ifpsdoubleline \pst@doublestroke \fi
  663. \ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi
  664. \ifshowpoints \pst@OpenShowPoints \fi
  665. \use@pscode
  666. \endgroup
  667. \ignorespaces}
  668. \def\begin@SpecialObj{%
  669. \leavevmode
  670. \pst@killglue
  671. \begingroup
  672. \use@par
  673. \init@pscode}
  674. \def\end@SpecialObj{%
  675. \use@pscode
  676. \endgroup
  677. \ignorespaces}
  678. \def\pst@code{}%
  679. \def\init@pscode{%
  680. \addto@pscode{%
  681. \pst@number\pslinewidth SLW
  682. \pst@usecolor\pslinecolor}}
  683. \def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}}
  684. \def\use@pscode{%
  685. \pstverb{%
  686. \pst@dict
  687. \tx@STP
  688. newpath
  689. \psk@origin
  690. \psk@swapaxes
  691. \pst@code
  692. end}%
  693. \gdef\pst@code{}}
  694. \def\KillGlue{%
  695. \def\pst@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@killglue\fi}}
  696. \def\DontKillGlue{\let\pst@killglue\relax}
  697. \DontKillGlue
  698. \def\solid@star{%
  699. \if@star
  700. \pslinewidth=\z@
  701. \psdoublelinefalse
  702. \def\pslinestyle{none}%
  703. \def\psfillstyle{solid}%
  704. \let\psfillcolor\pslinecolor
  705. \def\pst@setdoublesep{%
  706. \pst@getlength\psdoublesep\psdoublesep
  707. \pslinewidth=2\pslinewidth
  708. \advance\pslinewidth\psdoublesep\p@
  709. \let\pst@setdoublesep\relax}
  710. \def\tx@Shadow{Shadow }
  711. \def\pst@closedshadow{%
  712. \addto@pscode{%
  713. gsave
  714. \psk@shadowsize \psk@shadowangle \tx@PtoC
  715. \tx@Shadow
  716. \pst@usecolor\psshadowcolor
  717. gsave fill grestore
  718. stroke
  719. grestore
  720. gsave
  721. \pst@usecolor\psfillcolor
  722. gsave fill grestore
  723. stroke
  724. grestore}}
  725. \def\pst@openshadow{%
  726. \addto@pscode{%
  727. gsave
  728. \psk@shadowsize \psk@shadowangle \tx@PtoC
  729. \tx@Shadow
  730. \pst@usecolor\psshadowcolor
  731. \ifx\psfillstyle\@none\else
  732. gsave fill grestore
  733. stroke}%
  734. \pst@repeatarrows
  735. \addto@pscode{grestore}
  736. \ifx\psfillstyle\@none\else
  737. \addto@pscode{%
  738. gsave
  739. \pst@usecolor\psfillcolor
  740. gsave fill grestore
  741. stroke
  742. grestore}
  743. \def\pst@addborder{%
  744. \addto@pscode{%
  745. gsave
  746. \psk@border 2 mul
  747. CLW add SLW
  748. \pst@usecolor\psbordercolor
  749. stroke
  750. grestore}}
  751. \def\pst@stroke{%
  752. \ifx\pslinestyle\@none\else
  753. \addto@pscode{%
  754. gsave
  755. \pst@number\pslinewidth SLW
  756. \pst@usecolor\pslinecolor
  757. \@nameuse{psls@\pslinestyle}
  758. grestore}%
  759. \def\pst@fill{%
  760. \ifx\psfillstyle\@none\else
  761. \addto@pscode{gsave \@nameuse{psfs@\psfillstyle} grestore}%
  762. \def\pst@doublestroke{%
  763. \addto@pscode{%
  764. gsave
  765. \psdoublesep SLW
  766. \pst@usecolor\psdoublecolor
  767. stroke
  768. grestore}}
  769. \def\pst@arrowtype{%
  770. \ifx\psk@arrowB\@empty 0 \else -2 \fi
  771. \ifx\psk@arrowA\@empty 0 \else -1 \fi
  772. \def\pst@addarrowdef{%
  773. \addto@pscode{%
  774. /ArrowA {
  775. \ifx\psk@arrowA\@empty
  776. \pst@oplineto
  777. \else
  778. \pst@arrowdef{A}
  779. moveto
  780. } def
  781. /ArrowB {
  782. \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi
  783. } def}}
  784. \def\pst@arrowdef#1{%
  785. \ifnum\pst@repeatarrowsflag>\z@
  786. /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c
  787. \tx@BeginArrow
  788. \psk@arrowscale
  789. \@nameuse{psas@\@nameuse{psk@arrow#1}}
  790. \tx@EndArrow}
  791. \def\pst@repeatarrows{%
  792. \addto@pscode{%
  793. gsave
  794. \ifx\psk@arrowA\@empty\else
  795. ArrowAc ArrowA pop pop
  796. \ifx\psk@arrowB\@empty\else
  797. ArrowBc ArrowB pop pop pop pop
  798. grestore}}
  799. \def\pst@OpenShowPoints{%
  800. \addto@pscode{%
  801. gsave
  802. \psk@dotsize
  803. \@nameuse{psds@\psk@dotstyle}
  804. /TheDot {
  805. gsave T \psk@dotangle \psk@dotscale Dot grestore
  806. } def
  807. newpath
  808. Points aload length 2 div 2 sub cvi /N ED
  809. N 0 ge
  810. { \ifx\psk@arrowA\@empty
  811. TheDot
  812. \else
  813. pop pop
  814. N { TheDot } repeat
  815. \ifx\psk@arrowB\@empty
  816. TheDot
  817. \else
  818. pop pop
  819. \fi }
  820. { N 2 mul { pop } repeat }
  821. ifelse
  822. grestore}}
  823. \def\pscustom{\def\pst@par{}\pst@object{pscustom}}
  824. \long\def\pscustom@i#1{%
  825. \begin@SpecialObj
  826. \solid@star
  827. \let\pst@ifcustom\iftrue
  828. \let\begin@ClosedObj\begin@CustomObj
  829. \let\end@ClosedObj\endgroup
  830. \def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}%
  831. \let\end@OpenObj\endgroup
  832. \let\begin@AltOpenObj\begin@CustomObj
  833. \def\begin@SpecialObj{%
  834. \begingroup
  835. \pst@misplaced{special graphics object}%
  836. \def\addto@pscode####1{}
  837. \let\end@SpecialObj\endgroup}%
  838. \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
  839. \def\psclip##1{\pst@misplaced\psclip}%
  840. \def\pst@repeatarrowsflag{\z@}%
  841. \let\pst@setrepeatarrowsflag\relax
  842. \showpointsfalse
  843. \let\showpointstrue\relax
  844. \def\pst@linetype{\pslinetype}%
  845. \let\psset@liftpen\psset@@liftpen
  846. \psset@liftpen{\z@}%
  847. \def\pst@cp{/currentpoint load stopped pop }%
  848. \def\pst@oplineto{/lineto load stopped { moveto } if }%
  849. \def\pst@optcp##1##2{%
  850. \ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}%
  851. \let\caddto@pscode\addto@pscode
  852. \def\cuse@par##1{{\use@par##1}}%
  853. \the\pst@customdefs
  854. \setbox\pst@hbox=\hbox{#1}%
  855. \pst@fill
  856. \pst@stroke
  857. \end@SpecialObj}
  858. \def\begin@CustomObj{%
  859. \begingroup
  860. \use@par
  861. \addto@pscode{%
  862. \pst@number\pslinewidth SLW
  863. \pst@usecolor\pslinecolor}}
  864. \def\pst@oplineto{moveto }
  865. \def\pst@cp{}
  866. \def\pst@optcp#1#2{}
  867. \def\psset@liftpen#1{}
  868. \def\psset@@liftpen#1{%
  869. \ifcase#1\relax
  870. \def\psk@liftpen{\z@}%
  871. \def\pst@cp{/currentpoint load stopped pop }%
  872. \def\pst@oplineto{/lineto load stopped { moveto } if }%
  873. \def\psk@liftpen{1}%
  874. \def\pst@cp{}%
  875. \def\pst@oplineto{/lineto load stopped { moveto } if }%
  876. \def\psk@liftpen{2}%
  877. \def\pst@cp{}%
  878. \def\pst@oplineto{moveto }%
  879. \psset@liftpen{0}
  880. \def\psk@liftpen{-1}
  881. \def\psset@linetype#1{%
  882. \pst@getint{#1}\pslinetype
  883. \ifnum\pst@dimg<-3
  884. \@pstrickserr{linetype must be greater than -3}\@ehpa
  885. \def\pslinetype{0}%
  886. \psset@linetype{0}
  887. \def\caddto@pscode#1{%
  888. \@pstrickserr{Command can only be used in \string\pscustom}\@ehpa}
  889. \let\cuse@par\caddto@pscode
  890. \def\tx@MSave{%
  891. /msavemtrx
  892. [ tx@Dict /msavemtrx known { msavemtrx aload pop } if CM ]
  893. def }
  894. \def\tx@MRestore{%
  895. tx@Dict /msavemtrx known { length 0 gt } { false } ifelse
  896. { /msavematrx [ msavematrx aload pop setmatrix ] def }
  897. \newtoks\pst@customdefs
  898. \pst@customdefs{%
  899. \def\newpath{\addto@pscode{newpath}}%
  900. \def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
  901. \def\closepath{\addto@pscode{closepath}}%
  902. \def\gsave{\begingroup\addto@pscode{gsave}}%
  903. \def\grestore{\endgroup\addto@pscode{grestore}}%
  904. \def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
  905. \def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}%
  906. \def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}%
  907. \def\msave{\addto@pscode{\tx@MSave}}%
  908. \def\mrestore{\addto@pscode{\tx@MRestore}}%
  909. \def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}%
  910. \def\stroke{\def\pst@par{}\pst@object{stroke}}%
  911. \def\fill{\def\pst@par{}\pst@object{fill}}%
  912. \def\openshadow{\def\pst@par{}\pst@object{openshadow}}%
  913. \def\closedshadow{\def\pst@par{}\pst@object{closedshadow}}%
  914. \def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor tx@Shadow}}%
  915. \def\lineto{\pst@onecoor{lineto}}%
  916. \def\rlineto{\pst@onecoor{rlineto}}%
  917. \def\curveto{\pst@threecoor{curveto}}%
  918. \def\rcurveto{\pst@threecoor{rcurveto}}%
  919. \def\code#1{\addto@pscode{#1}}%
  920. \def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}%
  921. \def\rcoor{\pst@getcoors{}{}}%
  922. \def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}%
  923. \def\setcolor#1{%
  924. \@ifundefined{color@#1}{}{\addto@pscode{\use@color{#1}}}}%
  925. \def\arrows#1{{\psset@arrows{#1}\pst@addarrowdef}}%
  926. \let\file\pst@rawfile
  927. } % END \pst@customdefs
  928. \def\closedshadow@i{\cuse@par\pst@closedshadow}
  929. \def\openshadow@i{\cuse@par\pst@openshadow}
  930. \def\stroke@i{\cuse@par\pst@stroke}%
  931. \def\fill@i{\cuse@par\pst@fill}%
  932. \def\pst@onecoor#1(#2){%
  933. \pst@@getcoor{#2}%
  934. \addto@pscode{\pst@coor #1}}
  935. \def\pst@threecoor#1(#2)#3(#4)#5(#6){%
  936. \begingroup
  937. \pst@getcoor{#2}\pst@tempa
  938. \pst@getcoor{#4}\pst@tempb
  939. \pst@getcoor{#6}\pst@tembc
  940. \addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}%
  941. \endgroup}
  942. \def\pst@rawfile#1{%
  943. \begingroup
  944. \def\do##1{\catcode`##1=12\relax}"
  945. \dospecials
  946. \catcode`\%=14
  947. \pst@@rawfile{#1}%
  948. \endgroup}
  949. \def\pst@@rawfile#1{%
  950. \immediate\openin1 #1
  951. \ifeof1
  952. \@pstrickserr{File `#1' not found}\@ehpa
  953. \else
  954. \immediate\read1 to \pst@tempg
  955. \loop
  956. \ifeof1 \@pstfalse\else\@psttrue\fi
  957. \if@pst
  958. \addto@pscode\pst@tempg
  959. \immediate\read1 to \pst@tempg
  960. \repeat
  961. \immediate\closein1\relax}
  962. \def\tx@SD{SD }
  963. \def\tx@SQ{SQ }
  964. \def\tx@ST{ST }
  965. \def\tx@SP{SP }
  966. \@namedef{psds@*}{/Dot { 0 0 DS \tx@SD } def}
  967. \@namedef{psds@o}{%
  968. /r2 DS CLW sub def
  969. /Dot { 0 0 DS \tx@SD \pst@usecolor\psfillcolor 0 0 r2 \tx@SD } def}
  970. \@namedef{psds@square*}{%
  971. /r1 DS .886 mul def
  972. /Dot { r1 \tx@SQ } def}
  973. \@namedef{psds@square}{%
  974. /r1 DS .886 mul def /r2 r1 CLW sub def
  975. /Dot { r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ } def}
  976. \@namedef{psds@triangle*}{%
  977. /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
  978. /Dot { x1 y1 \tx@ST } def}
  979. \@namedef{psds@triangle}{%
  980. /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
  981. /y2 y1 CLW add def /x2 y2 1.732 mul neg def
  982. /Dot { x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST } def}
  983. \@namedef{psds@pentagon*}{%
  984. /r1 DS 1.149 mul def
  985. /Dot { r1 \tx@SP } def}
  986. \@namedef{psds@pentagon}{%
  987. DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED
  988. /Dot { r1 \tx@SP \pst@usecolor\psfillcolor
  989. r2 \tx@SP } def}
  990. \@namedef{psds@+}{%
  991. /DS DS 1.253 mul def
  992. /Dot { DS 0 moveto DS neg 0 L stroke
  993. 0 DS moveto 0 DS neg L stroke } def}
  994. \@namedef{psds@|}{%
  995. \psk@tbarsize CLW mul add 2 div /DS ED
  996. /Dot { 0 DS moveto 0 DS neg L stroke } def}
  997. \def\psset@dotstyle#1{%
  998. \@ifundefined{psds@#1}%
  999. {\@pstrickserr{Dot style `#1' not defined}\@eha}%
  1000. {\edef\psk@dotstyle{#1}}}
  1001. \psset@dotstyle{*}
  1002. \def\tx@NArray{NArray }
  1003. \def\tx@NArray{NArray }
  1004. \def\tx@Line{Line }
  1005. \def\tx@Arcto{Arcto }
  1006. \def\tx@CheckClosed{CheckClosed }
  1007. \def\tx@Polygon{Polygon }
  1008. \def\tx@CCA{CCA }
  1009. \def\tx@CCA{CCA }
  1010. \def\tx@CC{CC }
  1011. \def\tx@IC{IC }
  1012. \def\tx@BOC{BOC }
  1013. \def\tx@NC{NC }
  1014. \def\tx@EOC{EOC }
  1015. \def\tx@BAC{BAC }
  1016. \def\tx@NAC{NAC }
  1017. \def\tx@EAC{EAC }
  1018. \def\tx@OpenCurve{OpenCurve }
  1019. \def\tx@AltCurve{AltCurve }
  1020. \def\tx@ClosedCurve{ClosedCurve }
  1021. \def\psset@curvature#1{%
  1022. \edef\pst@tempg{#1 }%
  1023. \expandafter\psset@@curvature\pst@tempg * * * \@nil}
  1024. \def\psset@@curvature#1 #2 #3 #4\@nil{%
  1025. \pst@checknum{#1}\pst@tempg
  1026. \pst@checknum{#2}\pst@temph
  1027. \pst@checknum{#3}\pst@tempi
  1028. \edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}}
  1029. \psset@curvature{1 .1 0}
  1030. \def\pscurve{\def\pst@par{}\pst@object{pscurve}}
  1031. \def\pscurve@i{%
  1032. \pst@getarrows{%
  1033. \begin@OpenObj
  1034. \pst@getcoors[\pscurve@ii}}
  1035. \def\pscurve@ii{%
  1036. \addto@pscode{%
  1037. \pst@cp
  1038. \psk@curvature\space /c ED /b ED /a ED
  1039. \ifshowpoints true \else false \fi
  1040. \tx@OpenCurve}%
  1041. \end@OpenObj}
  1042. \def\psecurve{\def\pst@par{}\pst@object{psecurve}}
  1043. \def\psecurve@i{%
  1044. \pst@getarrows{%
  1045. \begin@OpenObj
  1046. \pst@getcoors[\psecurve@ii}}
  1047. \def\psecurve@ii{%
  1048. \addto@pscode{%
  1049. \psk@curvature\space /c ED /b ED /a ED
  1050. \ifshowpoints true \else false \fi
  1051. \tx@AltCurve}%
  1052. \end@OpenObj}
  1053. \def\psccurve{\def\pst@par{}\pst@object{psccurve}}
  1054. \def\psccurve@i{%
  1055. \begin@ClosedObj
  1056. \pst@getcoors[\psccurve@ii}
  1057. \def\psccurve@ii{%
  1058. \addto@pscode{%
  1059. \psk@curvature\space /c ED /b ED /a ED
  1060. \ifshowpoints true \else false \fi
  1061. \tx@ClosedCurve}%
  1062. \def\pst@linetype{1}%
  1063. \end@ClosedObj}
  1064. \def\psset@dotsize#1{%
  1065. \edef\pst@tempg{#1 }%
  1066. \expandafter\psset@@dotsize\pst@tempg -1 -1 -1\@nil}
  1067. \def\psset@@dotsize#1 #2 #3\@nil{%
  1068. \pst@checknum{#2}\pst@tempg
  1069. \pssetlength\pst@dimg{#1}%
  1070. \edef\psk@dotsize{%
  1071. /DS \pst@number\pst@dimg \pst@tempg CLW mul add 2 div def }}
  1072. \psset@dotsize{.5pt 2.5}
  1073. \def\psset@dotscale#1{\pst@getscale{#1}\psk@dotscale}
  1074. \psset@dotscale{1}
  1075. \def\pst@Getangle#1#2{%
  1076. \pst@getangle{#1}\pst@tempg
  1077. \def\pst@temph{0. }%
  1078. \ifx\pst@tempg\pst@temph
  1079. \def#2{}%
  1080. \else
  1081. \edef#2{\pst@tempg\space rotate }%
  1082. \def\psset@dotangle#1{\pst@Getangle{#1}\psk@dotangle}
  1083. \psset@dotangle{0}
  1084. \def\psdots{\def\pst@par{}\pst@object{psdots}}
  1085. \def\psdots@i{%
  1086. \begin@SpecialObj
  1087. \pst@getcoors[\psdots@ii}
  1088. \def\psdots@ii{%
  1089. \addto@pscode{false \tx@NArray \psdots@iii}%
  1090. \end@SpecialObj}
  1091. \def\psdots@iii{%
  1092. \psk@dotsize
  1093. \@nameuse{psds@\psk@dotstyle}
  1094. newpath
  1095. n { gsave T \psk@dotangle \psk@dotscale Dot grestore } repeat}
  1096. \def\tx@EndDot{EndDot }
  1097. \def\psas@oo{{\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot}
  1098. \def\psas@o{{\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot}
  1099. \@namedef{psas@**}{{false} true \psk@dotsize \tx@EndDot}
  1100. \@namedef{psas@*}{{false} false \psk@dotsize \tx@EndDot}
  1101. \newdimen\pslinearc
  1102. \def\psset@linearc#1{\pssetlength\pslinearc{#1}}
  1103. \psset@linearc{0pt}
  1104. \def\psline{\def\pst@par{}\pst@object{psline}}
  1105. \def\psline@i{%
  1106. \pst@getarrows{%
  1107. \begin@OpenObj
  1108. \pst@getcoors[\psline@ii}}
  1109. \def\psline@ii{%
  1110. \addto@pscode{\pst@cp \psline@iii \tx@Line}%
  1111. \end@OpenObj}
  1112. \def\psline@iii{%
  1113. \ifdim\pslinearc>\z@
  1114. /r \pst@number\pslinearc def
  1115. /Lineto { \tx@Arcto } def
  1116. \else
  1117. /Lineto /lineto load def
  1118. \ifshowpoints true \else false \fi}
  1119. \def\qline(#1)(#2){%
  1120. \def\pst@par{}%
  1121. \begin@SpecialObj
  1122. \def\pst@linetype{0}%
  1123. \pst@getcoor{#1}\pst@tempa
  1124. \pst@@getcoor{#2}%
  1125. \addto@pscode{%
  1126. \pst@tempa moveto \pst@coor L
  1127. \@nameuse{psls@\pslinestyle}}%
  1128. \end@SpecialObj}
  1129. \def\pspolygon{\def\pst@par{}\pst@object{pspolygon}}
  1130. \def\pspolygon@i{%
  1131. \begin@ClosedObj
  1132. \def\pst@cp{}%
  1133. \pst@getcoors[\pspolygon@ii}
  1134. \def\pspolygon@ii{%
  1135. \addto@pscode{\psline@iii \tx@Polygon}%
  1136. \def\pst@linetype{1}%
  1137. \end@ClosedObj}
  1138. \def\psset@framearc#1{\pst@checknum{#1}\psk@framearc}
  1139. \psset@framearc{0}
  1140. \def\psset@cornersize#1{%
  1141. \pst@expandafter\psset@@cornersize{#1}\@nil}
  1142. \def\psset@@cornersize#1#2\@nil{%
  1143. \if #1a\relax
  1144. \def\psk@cornersize{\pst@number\pslinearc false }%
  1145. \else
  1146. \def\psk@cornersize{\psk@framearc true }%
  1147. \psset@cornersize{relative}
  1148. \def\tx@Rect{Rect }
  1149. \def\tx@OvalFrame{OvalFrame }
  1150. \def\tx@Frame{Frame }
  1151. \def\psset@dimen#1{%
  1152. \pst@expandafter\psset@@dimen{#1}\@nil}
  1153. \def\psset@@dimen#1#2\@nil{%
  1154. \if #1o\relax
  1155. \def\psk@dimen{.5 }%
  1156. \else
  1157. \if #1m\relax
  1158. \def\psk@dimen{0 }%
  1159. \else
  1160. \if #1i\relax
  1161. \def\psk@dimen{-.5 }%
  1162. \psset@dimen{outer}
  1163. \def\psframe{\def\pst@par{}\pst@object{psframe}}
  1164. \def\psframe@i(#1){%
  1165. \@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}}
  1166. \def\psframe@ii(#1)(#2){%
  1167. \begin@ClosedObj
  1168. \pst@getcoor{#1}\pst@tempa
  1169. \pst@@getcoor{#2}%
  1170. \addto@pscode{\psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame}%
  1171. \def\pst@linetype{2}%
  1172. \showpointsfalse
  1173. \end@ClosedObj}
  1174. \def\psbezier{\def\pst@par{}\pst@object{psbezier}}
  1175. \def\psbezier@i{\pst@getarrows\psbezier@ii}
  1176. \def\psbezier@ii#1(#2)#3(#4)#5(#6){%
  1177. \@ifnextchar({\psbezier@iii{1}(#2)(#4)(#6)}%
  1178. {\psbezier@iii{\z@}(0,0)(#2)(#4)(#6)}}
  1179. \def\psbezier@iii#1(#2)(#3)(#4)(#5){%
  1180. \begin@OpenObj
  1181. \pst@getcoor{#2}\pst@tempa
  1182. \pst@getcoor{#3}\pst@tempb
  1183. \pst@getcoor{#4}\pst@tempc
  1184. \pst@getcoor{#5}\pst@tempd
  1185. \pst@optcp{#1}\pst@tempa
  1186. \ifshowpoints\psbezier@iv\fi
  1187. \addto@pscode{
  1188. \pst@tempb \pst@tempa ArrowA
  1189. \pst@tempc \pst@tempd ArrowB
  1190. curveto}%
  1191. \end@OpenObj}
  1192. \def\psbezier@iv{%
  1193. \addto@pscode{%
  1194. gsave
  1195. \pst@tempa \pst@tempb \pst@tempc \pst@tempd
  1196. newpath moveto L L L
  1197. CLW 2 div SLW
  1198. [ \psk@dash\space ] 0 setdash stroke
  1199. grestore
  1200. /Points [\pst@tempa\pst@tempb\pst@tempc\pst@tempd] def}}
  1201. \def\tx@Parab{Parab }
  1202. \def\parabola{\def\pst@par{}\pst@object{parabola}}
  1203. \def\parabola@i{\pst@getarrows\parabola@ii}
  1204. \def\parabola@ii#1(#2)#3(#4){%
  1205. \begin@OpenObj
  1206. \pst@getcoor{#2}\pst@tempa
  1207. \pst@@getcoor{#4}%
  1208. \addto@pscode{\pst@tempa \pst@coor \tx@Parab}%
  1209. \end@OpenObj}
  1210. \def\psset@gridwidth#1{\pst@getlength{#1}\psk@gridwidth}
  1211. \psset@gridwidth{.8pt}
  1212. \def\psset@griddots#1{%
  1213. \pst@cntg=#1\relax
  1214. \edef\psk@griddots{\the\pst@cntg}}
  1215. \psset@griddots{0}
  1216. \def\psset@gridcolor#1{\pst@getcolor{#1}\psgridcolor}
  1217. \psset@gridcolor{black}
  1218. \def\psset@subgridwidth#1{\pst@getlength{#1}\psk@subgridwidth}
  1219. \psset@subgridwidth{.4pt}
  1220. \def\psset@subgridcolor#1{\pst@getcolor{#1}\pssubgridcolor}
  1221. \psset@subgridcolor{gray}
  1222. \def\psset@subgriddots#1{%
  1223. \pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}}
  1224. \psset@subgriddots{0}
  1225. \def\psset@subgriddiv#1{%
  1226. \pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}}
  1227. \psset@subgriddiv{5}
  1228. \def\psset@gridlabels#1{\pst@getlength{#1}\psk@gridlabels}
  1229. \psset@gridlabels{10pt}
  1230. \def\psset@gridlabelcolor#1{\pst@getcolor{#1}\psgridlabelcolor}
  1231. \psset@gridlabelcolor{black}
  1232. \def\tx@Grid{Grid }
  1233. \def\psgrid{\def\pst@par{}\pst@object{psgrid}}
  1234. \def\psgrid@i{\@ifnextchar(%
  1235. {\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}}
  1236. \def\psgrid@ii(#1){\@ifnextchar(%
  1237. {\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}}
  1238. \def\psgrid@iii(#1)(#2){\@ifnextchar(%
  1239. {\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}}
  1240. \def\psgrid@iv(#1)(#2)(#3){%
  1241. \begin@SpecialObj
  1242. \pst@getcoor{#1}\pst@tempa
  1243. \pst@getcoor{#2}\pst@tempb
  1244. \pst@@getcoor{#3}%
  1245. \ifnum\psk@subgriddiv>1
  1246. \addto@pscode{gsave
  1247. \psk@subgridwidth SLW \pst@usecolor\pssubgridcolor
  1248. \pst@tempb \pst@coor \pst@tempa
  1249. \pst@number\psxunit \pst@number\psyunit
  1250. \psk@subgriddiv\space \psk@subgriddots\space
  1251. {} 0 \tx@Grid grestore}%
  1252. \addto@pscode{gsave
  1253. \psk@gridwidth SLW \pst@usecolor\psgridcolor
  1254. \pst@tempb \pst@coor \pst@tempa
  1255. \pst@number\psxunit \pst@number\psyunit
  1256. 1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor }
  1257. \psk@gridlabels \tx@Grid grestore}%
  1258. \end@SpecialObj}
  1259. \newif\ifpsmathbox
  1260. \psmathboxtrue
  1261. \def\pst@mathflag{\z@}
  1262. \newtoks\everypsbox
  1263. \long\def\pst@makenotverbbox#1#2{%
  1264. \edef\pst@mathflag{%
  1265. \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
  1266. \setbox\pst@hbox=\hbox{%
  1267. \ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi
  1268. {\the\everypsbox#2}%
  1269. \ifnum\pst@mathflag>\z@$\fi}%
  1270. \def\pst@makeverbbox#1{%
  1271. \def\pst@afterbox{#1}%
  1272. \edef\pst@mathflag{%
  1273. \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
  1274. \afterassignment\pst@beginbox
  1275. \setbox\pst@hbox\hbox}
  1276. \def\pst@beginbox{%
  1277. \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
  1278. \bgroup\aftergroup\pst@endbox
  1279. \the\everypsbox}
  1280. \def\pst@endbox{%
  1281. \ifnum\pst@mathflag>\z@$\fi
  1282. \egroup
  1283. \pst@afterbox}
  1284. \def\pst@makebox{\pst@@makebox}
  1285. \def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}}
  1286. \def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}}
  1287. \psverbboxfalse
  1288. \def\pst@longbox{%
  1289. \def\pst@makebox{%
  1290. \gdef\pst@makebox{\pst@@makebox}%
  1291. \pst@makelongbox}}
  1292. \def\pst@makelongbox#1{%
  1293. \def\pst@afterbox{#1}%
  1294. \edef\pst@mathflag{%
  1295. \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
  1296. \setbox\pst@hbox\hbox\bgroup
  1297. \aftergroup\pst@afterbox
  1298. \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
  1299. \begingroup
  1300. \the\everypsbox}
  1301. \def\pst@endlongbox{%
  1302. \endgroup
  1303. \ifnum\pst@mathflag>\z@$\fi
  1304. \egroup}
  1305. \def\pslongbox#1#2{%
  1306. \@namedef{#1}{\pst@longbox#2}%
  1307. \@namedef{end#1}{\pst@endlongbox}}
  1308. \newdimen\psframesep
  1309. \def\psset@framesep#1{\pssetlength\psframesep{#1}}
  1310. \psset@framesep{3pt}
  1311. \newif\ifpsboxsep
  1312. \def\psset@boxsep#1{\@nameuse{psboxsep#1}}
  1313. \psset@boxsep{true}
  1314. \def\pst@useboxpar{%
  1315. \use@par
  1316. \if@star
  1317. \let\pslinecolor\psfillcolor
  1318. \solid@star
  1319. \let\solid@star\relax
  1320. \ifpsdoubleline \pst@setdoublesep \fi}
  1321. \def\psframebox{\def\pst@par{}\pst@object{psframebox}}
  1322. \def\psframebox@i{\pst@makebox\psframebox@ii}
  1323. \def\psframebox@ii{%
  1324. \begingroup
  1325. \pst@useboxpar
  1326. \pst@dima=\pslinewidth
  1327. \advance\pst@dima by \psframesep
  1328. \pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima
  1329. \pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima
  1330. \pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima
  1331. \setbox\pst@hbox=\hbox{%
  1332. \ifpsboxsep\kern\pst@dima\fi
  1333. \begin@ClosedObj
  1334. \addto@pscode{%
  1335. \psk@cornersize
  1336. \pst@number\pst@dima neg
  1337. \pst@number\pst@dimb neg
  1338. \pst@number\pst@dimc
  1339. \pst@number\pst@dimd
  1340. \tx@Frame}%
  1341. \def\pst@linetype{2}%
  1342. \showpointsfalse
  1343. \end@ClosedObj
  1344. \box\pst@hbox
  1345. \ifpsboxsep\kern\pst@dima\fi}%
  1346. \ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi
  1347. \leavevmode\box\pst@hbox
  1348. \endgroup}
  1349. \def\psdblframebox{\def\pst@par{}\pst@object{psdblframebox}}
  1350. \def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i}
  1351. \def\psclip#1{%
  1352. \leavevmode
  1353. \begingroup
  1354. \begin@psclip
  1355. \begingroup
  1356. \def\use@pscode{%
  1357. \pstVerb{%
  1358. \pst@dict
  1359. /mtrxc CM def
  1360. CP CP T
  1361. \tx@STV
  1362. \psk@origin
  1363. \psk@swapaxes
  1364. newpath
  1365. \pst@code
  1366. newpath
  1367. mtrxc setmatrix
  1368. moveto
  1369. 0 setgray
  1370. end}%
  1371. \gdef\pst@code{}}%
  1372. \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
  1373. \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
  1374. \hbox to\z@{#1}%
  1375. \endgroup
  1376. \def\endpsclip{%
  1377. \end@psclip
  1378. \endgroup}%
  1379. \ignorespaces}
  1380. \def\endpsclip{\pst@misplaced\endpsclip}
  1381. \let\begin@psclip\relax
  1382. \def\end@psclip{\pstVerb{currentpoint initclip moveto}}
  1383. \def\AltClipMode{%
  1384. \def\end@psclip{\pstVerb{\pst@grestore}}%
  1385. \def\begin@psclip{\pstVerb{gsave}}}
  1386. \def\clipbox{\@ifnextchar[{\psclipbox@}{psclipbox@[\z@]}}
  1387. \def\clipbox@[#1]{\pst@makebox\psclipbox@@{#1}}
  1388. \def\clipbox@@#1{%
  1389. \pssetlength\pst@dimg{#1}%
  1390. \leavevmode\hbox{%
  1391. \begin@psclip
  1392. \pst@Verb{%
  1393. CM \tx@STV CP T newpath
  1394. /a \pst@number\pst@dimg def
  1395. /w \pst@number{\wd\pst@hbox}a add def
  1396. /d \pst@number{\dp\pst@hbox}a add neg def
  1397. /h \pst@number{\ht\pst@hbox}a add def
  1398. a neg d moveto
  1399. a neg h L
  1400. w h L
  1401. w d L
  1402. closepath
  1403. newpath
  1404. 0 0 moveto
  1405. setmatrix}%
  1406. \unhbox\pst@hbox
  1407. \end@psclip}}
  1408. \def\psshadowbox{%
  1409. \def\pst@par{}\pst@object{psshadowbox}}
  1410. \def\psshadowbox@i{\pst@makebox\psshadowbox@ii}
  1411. \def\psshadowbox@ii{%
  1412. \begingroup
  1413. \pst@useboxpar
  1414. \psshadowtrue
  1415. \psboxseptrue
  1416. \def\psk@shadowangle{-45 }%
  1417. \setbox\pst@hbox=\hbox{\psframebox@ii}%
  1418. \pst@dimh=\psk@shadowsize\p@
  1419. \pst@dimh=.7071\pst@dimh
  1420. \pst@dimg=\dp\pst@hbox
  1421. \advance\pst@dimg\pst@dimh
  1422. \dp\pst@hbox=\pst@dimg
  1423. \pst@dimg=\wd\pst@hbox
  1424. \advance\pst@dimg\pst@dimh
  1425. \wd\pst@hbox=\pst@dimg
  1426. \leavevmode
  1427. \box\pst@hbox
  1428. \endgroup}
  1429. \def\pscirclebox{\def\pst@par{}\pst@object{pscirclebox}}
  1430. \def\pscirclebox@i{\pst@makebox{\pscirclebox@ii{}}}
  1431. \def\pscirclebox@ii#1{%
  1432. \begingroup
  1433. \pst@useboxpar
  1434. \setbox\pst@hbox=\hbox{#1\pscirclebox@iii\box\pst@hbox}%
  1435. \ifpsboxsep
  1436. \pst@dima=.5\wd\pst@hbox
  1437. \pst@pyth\pst@dima\pst@dimb\pst@dimc
  1438. \advance\pst@dimc\pslinewidth
  1439. \advance\pst@dimc\psframesep
  1440. \setbox\pst@hbox=\hbox to2\pst@dimc{%
  1441. \vbox{\vskip\pst@dimc\vskip-\pst@dimb\box\pst@hbox}%
  1442. \hss}%
  1443. \advance\pst@dimc-\pst@dimb
  1444. \dp\pst@hbox=\pst@dimc
  1445. \leavevmode\box\pst@hbox
  1446. \endgroup}
  1447. \def\pscirclebox@iii{%
  1448. \if@star
  1449. \pslinewidth\z@
  1450. \pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor
  1451. newpath \pscirclebox@iv \tx@SD end}%
  1452. \else
  1453. \begin@ClosedObj
  1454. \def\pst@linetype{4}\showpointsfalse
  1455. \addto@pscode{%
  1456. \pscirclebox@iv CLW 2 div add 0 360 arc closepath}%
  1457. \end@ClosedObj
  1458. \def\pscirclebox@iv{%
  1459. \pst@number{\wd\pst@hbox}2 div
  1460. \pst@number{\ht\pst@hbox}\pst@number{\dp\pst@hbox}add 2 div
  1461. 2 copy \pst@number{\dp\pst@hbox}sub 4 2 roll
  1462. \tx@Pyth \pst@number\psframesep add }
  1463. \def\psovalbox{\def\pst@par{}\pst@object{psovalbox}}
  1464. \def\psovalbox@i{\pst@makebox{\psovalbox@ii{}}}
  1465. \def\psovalbox@ii#1{%
  1466. \begingroup
  1467. \pst@useboxpar
  1468. \pst@dimd=.707\pslinewidth\advance\pst@dimd by 1.414\psframesep
  1469. \pst@dimg=\ht\pst@hbox\advance\pst@dimg\dp\pst@hbox
  1470. \pst@dimb=.707\pst@dimg\advance\pst@dimb\pst@dimd
  1471. \pst@dima=.707\wd\pst@hbox\advance\pst@dima\pst@dimd
  1472. \setbox\pst@hbox=\hbox{#1\psovalbox@iii\box\pst@hbox}%
  1473. \ifpsboxsep
  1474. \setbox\pst@hbox\hbox to 2\pst@dima{\hss\unhbox\pst@hbox\hss}%
  1475. \advance\pst@dimb-.5\pst@dimg
  1476. \pst@dimg\ht\pst@hbox
  1477. \advance\pst@dimg\pst@dimb
  1478. \ht\pst@hbox=\pst@dimb
  1479. \pst@dimg=\dp\pst@hbox
  1480. \advance\pst@dimg\pst@dimb
  1481. \dp\pst@hbox=\pst@dimb
  1482. \leavevmode\box\pst@hbox
  1483. \endgroup}
  1484. \def\psovalbox@iii{%
  1485. \begin@ClosedObj
  1486. \addto@pscode{%
  1487. 0 360
  1488. \pst@number\pst@dima \pst@number\pst@dimb
  1489. \pst@number{\wd\pst@hbox}2 div
  1490. \pst@number\pst@dimg 2 div \pst@number{\dp\pst@hbox}sub
  1491. \tx@Ellipse
  1492. closepath}%
  1493. \def\pst@linetype{2}%
  1494. \end@ClosedObj}
  1495. \def\psset@arcsepA#1{\pst@getlength{#1}\psk@arcsepA}
  1496. \def\psset@arcsepB#1{\pst@getlength{#1}\psk@arcsepB}
  1497. \def\psset@arcsep#1{%
  1498. \psset@arcsepA{#1}\let\psk@arcsepB\psk@arcsepA}
  1499. \psset@arcsep{0}
  1500. \def\tx@ArcArrow{ArcArrow }
  1501. \def\psarc{\def\pst@par{}\pst@object{psarc}}
  1502. \def\psarc@i{%
  1503. \@ifnextchar({\psarc@iii}{\psarc@ii}}
  1504. \def\psarc@ii#1{\addto@par{arrows=#1}%
  1505. \@ifnextchar({\psarc@iii}{\psarc@iii(0,0)}}
  1506. \def\psarc@iii(#1)#2#3#4{%
  1507. \begin@OpenObj
  1508. \pst@getangle{#3}\pst@tempa
  1509. \pst@getangle{#4}\pst@tempb
  1510. \pst@@getcoor{#1}%
  1511. \pssetlength\pst@dima{#2}%
  1512. \addto@pscode{\psarc@iv \psarc@v}%
  1513. \gdef\psarc@type{0}%
  1514. \showpointsfalse
  1515. \end@OpenObj}
  1516. \def\psarc@iv{%
  1517. \pst@coor /y ED /x ED
  1518. /r \pst@number\pst@dima def
  1519. /c 57.2957 r \tx@Div def
  1520. /angleA
  1521. \pst@tempa
  1522. \psk@arcsepA c mul 2 div
  1523. \ifcase \psarc@type add \or sub \fi
  1524. /angleB
  1525. \pst@tempb
  1526. \psk@arcsepB c mul 2 div
  1527. \ifcase \psarc@type sub \or add \fi
  1528. \ifshowpoints\psarc@showpoints\fi
  1529. \ifx\psk@arrowA\@empty
  1530. \ifnum\psk@liftpen=2
  1531. r angleA \tx@PtoC
  1532. y add exch x add exch
  1533. moveto
  1534. \def\psarc@v{%
  1535. x y r
  1536. angleA
  1537. \ifx\psk@arrowA\@empty\else
  1538. { ArrowA CP }
  1539. { \ifcase\psarc@type add \or sub \fi }
  1540. \tx@ArcArrow
  1541. angleB
  1542. \ifx\psk@arrowB\@empty\else
  1543. { ArrowB }
  1544. { \ifcase\psarc@type sub \or add \fi }
  1545. \tx@ArcArrow
  1546. \ifcase\psarc@type arc \or arcn \fi}
  1547. \def\psarc@type{0}
  1548. \def\psarc@showpoints{%
  1549. gsave
  1550. newpath
  1551. x y moveto
  1552. x y r \pst@tempa \pst@tempb
  1553. \ifcase\psarc@type arc \or arcn \fi
  1554. closepath
  1555. CLW 2 div SLW
  1556. [ \psk@dash\space ] 0 setdash stroke
  1557. grestore }
  1558. \def\psarcn{\def\pst@par{}\pst@object{psarcn}}
  1559. \def\psarcn@i{\def\psarc@type{1}\psarc@i}
  1560. \def\pscircle{\def\pst@par{}\pst@object{pscircle}}
  1561. \def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}}
  1562. \def\pscircle@do(#1)#2{%
  1563. \if@star
  1564. {\use@par\qdisk(#1){#2}}%
  1565. \else
  1566. \begin@ClosedObj
  1567. \pst@@getcoor{#1}%
  1568. \pssetlength\pst@dimc{#2}%
  1569. \def\pst@linetype{4}%
  1570. \addto@pscode{%
  1571. \pst@coor
  1572. \pst@number\pst@dimc
  1573. \psk@dimen CLW mul sub
  1574. 0 360 arc
  1575. closepath}%
  1576. \showpointsfalse
  1577. \end@ClosedObj
  1578. \ignorespaces}
  1579. \def\qdisk(#1)#2{%
  1580. \def\pst@par{}%
  1581. \begin@SpecialObj
  1582. \pst@@getcoor{#1}%
  1583. \pssetlength\pst@dimg{#2}%
  1584. \addto@pscode{\pst@coor \pst@number\pst@dimg \tx@SD}%
  1585. \end@SpecialObj}
  1586. \def\pswedge{\def\pst@par{}\pst@object{pswedge}}
  1587. \def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}}
  1588. \def\pswedge@ii(#1)#2#3#4{%
  1589. \begin@ClosedObj
  1590. \pssetlength\pst@dimc{#2}
  1591. \pst@getangle{#3}\pst@tempa
  1592. \pst@getangle{#4}\pst@tempb
  1593. \pst@@getcoor{#1}%
  1594. \def\pst@linetype{1}%
  1595. \addto@pscode{%
  1596. \pst@coor
  1597. 2 copy
  1598. moveto
  1599. \pst@number\pst@dimc \psk@dimen CLW mul sub % Adjusted radius
  1600. \pst@tempa \pst@tempb
  1601. closepath}%
  1602. \showpointsfalse
  1603. \end@ClosedObj}
  1604. \def\tx@Ellipse{Ellipse }
  1605. \def\psellipse{\def\pst@par{}\pst@object{psellipse}}
  1606. \def\psellipse@i(#1){\@ifnextchar(%
  1607. {\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}}
  1608. \def\psellipse@ii(#1)(#2){%
  1609. \begin@ClosedObj
  1610. \pst@getcoor{#1}\pst@tempa
  1611. \pst@@getcoor{#2}%
  1612. \addto@pscode{%
  1613. 0 360
  1614. \pst@coor
  1615. \ifdim\psk@dimen\p@=\z@\else
  1616. \psk@dimen CLW mul dup 3 1 roll
  1617. sub 3 1 roll sub exch
  1618. \pst@tempa
  1619. \tx@Ellipse
  1620. closepath}%
  1621. \def\pst@linetype{2}%
  1622. \end@ClosedObj}
  1623. \def\multirput{%
  1624. \begingroup\pst@getref{\pst@getrputrot\multirput@i}}
  1625. \def\multirput@i(#1){\@ifnextchar(%
  1626. {\multirput@ii(#1)}{\multirput@ii(0,0)(#1)}}
  1627. \def\multirput@ii(#1,#2)(#3,#4)#5{%
  1628. \pst@makebox{\multirput@iii(#1,#2)(#3,#4){#5}}}
  1629. \def\multirput@iii(#1,#2)(#3,#4)#5{%
  1630. \pst@makesmall\pst@hbox
  1631. \ifx\pst@rot\@empty\else\pst@rotate\pst@hbox\fi
  1632. \pssetxlength\pst@dima{#1}\pssetylength\pst@dimb{#2}
  1633. \pssetxlength\pst@dimc{#3}\pssetylength\pst@dimd{#4}
  1634. \pst@cntg=#5\relax\pst@cnth=0\relax
  1635. \leavevmode
  1636. \loop\ifnum\pst@cntg>\pst@cnth
  1637. \vbox to \z@{\vss\hbox to \z@{%
  1638. \kern\pst@dima\copy\pst@hbox\hss}\vskip\pst@dimb}%
  1639. \advance\pst@dima by\pst@dimc
  1640. \advance\pst@dimb by\pst@dimd
  1641. \advance\pst@cnth by 1
  1642. \repeat
  1643. \endgroup\ignorespaces}
  1644. \def\multips{\begingroup\pst@getrputrot\multips@i}
  1645. \def\multips@i(#1){\@ifnextchar({\@multips@ii(#1)}{\@multips@ii(0,0)(#1)}}
  1646. \def\@multips@ii(#1)(#2)#3#4{%
  1647. \pst@getcoor{#1}\pst@tempa
  1648. \pst@@getcoor{#2}%
  1649. \pst@cnta=#3\relax
  1650. \addto@pscode{%
  1651. \pst@tempa T \the\pst@cnta\space \pslbrace
  1652. gsave \ifx\pst@rot\@empty\else\pst@rot rotate \fi }%
  1653. \hbox to\z@{%
  1654. \def\init@pscode{%
  1655. \addto@pscode{%
  1656. gsave
  1657. \pst@number\pslinewidth SLW
  1658. \pst@usecolor\pslinecolor}}%
  1659. \def\use@pscode{\addto@pscode{grestore}}%
  1660. \def\psclip##1{\pst@misplaced\psclip}%
  1661. \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
  1662. \addto@pscode{grestore \pst@coor T \psrbrace repeat}%
  1663. \leavevmode
  1664. \use@pscode
  1665. \endgroup
  1666. \ignorespaces}
  1667. \def\scalebox#1{%
  1668. \begingroup
  1669. \pst@getscale{#1}\pst@tempa
  1670. \pst@makebox{\@scalebox}}
  1671. \def\@scalebox{%
  1672. \leavevmode
  1673. \ifx\pst@tempa\@empty
  1674. \box\pst@hbox
  1675. \else
  1676. \hbox{%
  1677. \ht\pst@hbox=\pst@temph\ht\pst@hbox%
  1678. \dp\pst@hbox=\pst@temph\dp\pst@hbox%
  1679. \pst@dima=\pst@tempg\wd\pst@hbox%
  1680. \ifdim\pst@dima<\z@\kern-\pst@dima\fi
  1681. \pst@Verb{CP CP T \pst@tempa \tx@NET}%
  1682. \hbox to \z@{\box\pst@hbox\hss}%
  1683. \pst@Verb{%
  1684. CP CP T
  1685. 1 \pst@tempg\space div 1 \pst@temph\space div scale
  1686. \tx@NET}%
  1687. \ifdim\pst@dima>\z@\kern\pst@dima\fi}%
  1688. \endgroup}
  1689. \pslongbox{Scalebox}{\scalebox}
  1690. \def\scaleboxto(#1,#2){%
  1691. \begingroup
  1692. \pssetlength\pst@dima{#1}%
  1693. \pssetlength\pst@dimb{#2}%
  1694. \pst@makebox{\@scaleboxto\@scalebox}}
  1695. \def\@scaleboxto{%
  1696. \ifdim\pst@dima=\z@\else
  1697. \pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempg
  1698. \ifdim\pst@dimb=\z@
  1699. \let\pst@temph\pst@tempg
  1700. \else
  1701. \pst@dimc=\ht\pst@hbox\advance\pst@dimc\dp\pst@hbox
  1702. \pst@divide{\pst@dimb}{\pst@dimc}\pst@temph
  1703. \ifdim\pst@dima=\z@\let\pst@tempg\pst@temph\fi
  1704. \edef\pst@tempa{\pst@tempg\space\pst@temph\space scale }%
  1705. \ifdim\pst@dima=\z@
  1706. \ifdim\pst@dimb=\z@
  1707. \@pstrickserr{%
  1708. \string\scaleboxto\space dimensions cannot both be zero}\@ehpa
  1709. \def\pst@tempa{}%
  1710. \fi\fi}
  1711. \pslongbox{Scaleboxto}{\scaleboxto}
  1712. \def\tx@Rot{Rot }
  1713. \def\rotateleft{\pst@makebox{\@rotateleft\pst@hbox}}
  1714. \def\@rotateleft#1{%
  1715. \leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
  1716. \pst@Verb{90 \tx@Rot}
  1717. \vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}%
  1718. \pst@Verb{-90 \tx@Rot}}}}
  1719. \def\rotateright{\pst@makebox{\@rotateright\pst@hbox}}
  1720. \def\@rotateright#1{%
  1721. \hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
  1722. \pst@Verb{-90 \tx@Rot}
  1723. \vbox to \z@{\hbox to \z@{\hss\box#1}\vss}%
  1724. \pst@Verb{90 \tx@Rot}}}}
  1725. \def\rotatedown{\pst@makebox{\@rotatedown\pst@hbox}}
  1726. \def\@rotatedown#1{%
  1727. \hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1%
  1728. \pst@Verb{180 \tx@Rot}%
  1729. \vbox to \z@{\hbox to \z@{\box#1\hss}\vss}%
  1730. \pst@Verb{-180 \tx@Rot}}}}
  1731. \pslongbox{Rotateleft}{\rotateleft}
  1732. \pslongbox{Rotateright}{\rotateright}
  1733. \pslongbox{Rotatedown}{\rotatedown}
  1734. \def\pst@getref#1{%
  1735. \@ifnextchar[%
  1736. {\def\refpoint@x{.5}\def\refpoint@y{.5}\pst@@getref{#1}}%
  1737. {\let\refpoint@x\relax#1}}
  1738. \def\pst@@getref#1[#2]{%
  1739. \pst@expandafter\pst@@@getref{#2}\@empty,,\@nil#1}
  1740. \def\pst@@@getref#1#2,#3,#4\@nil{%
  1741. \ifx\@empty#3\@empty
  1742. \@nameuse{getref@#1}\@nameuse{getref@#2}%
  1743. \else
  1744. \pst@checknum{#1#2}\refpoint@x
  1745. \pst@checknum{#3}\refpoint@y
  1746. \def\getref@t{\def\refpoint@y{1}}
  1747. \def\getref@b{\def\refpoint@y{0}}
  1748. \def\getref@B{\let\refpoint@y\relax}
  1749. \def\getref@l{\def\refpoint@x{0}}
  1750. \def\getref@r{\def\refpoint@x{1}}
  1751. \def\pst@makesmall#1{%
  1752. \ifx\refpoint@x\relax
  1753. \setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}%
  1754. \else
  1755. \pst@@makesmall{#1}%
  1756. \def\pst@@makesmall#1{%
  1757. \pst@dimh=\refpoint@x\wd#1%
  1758. \ifx\refpoint@y\relax
  1759. \pst@dimg=\dp#1%
  1760. \else
  1761. \pst@dimg=\refpoint@y\ht#1%
  1762. \advance\pst@dimg\refpoint@y\dp#1%
  1763. \setbox#1=\hbox to\z@{%
  1764. \hskip-\pst@dimh\vbox to\z@{\vss\box#1\vskip-\pst@dimg}\hss}}
  1765. \def\pst@getrputrot#1{%
  1766. \@ifnextchar(%
  1767. {\def\pst@rot{}#1}%
  1768. {\pst@getrot{\@ifnextchar({#1}{#1(0,0)}}}}
  1769. \def\pst@getrot#1#2{%
  1770. \pst@expandafter{\@ifnextchar*{\pst@@@getrot}{\pst@@getrot}}{#2}\@nil
  1771. \ifx\pst@rotlist\@empty\else
  1772. \edef\pst@rotlist{\pst@rotlist \pst@rot add }%
  1773. \def\pst@@getrot#1\@nil{%
  1774. \def\next##1@#1=##2@##3\@nil{%
  1775. \ifx\relax##2%
  1776. \pst@getangle{#1}\pst@rot
  1777. \else
  1778. \def\pst@rot{##2}%
  1779. \fi}%
  1780. \expandafter\next\pst@rottable @#1=\relax @\@nil}
  1781. \def\pst@@@getrot#1#2\@nil{%
  1782. \pst@@getrot#2\@nil
  1783. \edef\pst@rot{\pst@rotlist neg \ifx\pst@rot\@empty\else\pst@rot add \fi}}%
  1784. \def\pst@rotlist{0 }
  1785. \def\pst@rot{}
  1786. \def\pst@rottable{%
  1787. @L=90 %
  1788. @D=180 %
  1789. @R=-90 %
  1790. @N=\pst@rotlist neg %
  1791. @W=\pst@rotlist neg 90 add %
  1792. @S=\pst@rotlist neg 180 add %
  1793. @E=\pst@rotlist neg 90 sub }
  1794. \def\pst@rotate#1{%
  1795. \setbox#1=\hbox{%
  1796. \pst@Verb{\pst@rot \tx@Rot}%
  1797. \box#1%
  1798. \pst@Verb{\pst@rot neg \tx@Rot}}}
  1799. \def\psput@cartesian#1{%
  1800. \hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}}
  1801. \def\psput@special#1{%
  1802. \hbox{%
  1803. \pst@Verb{{ \pst@coor } \tx@PutCoor \tx@PutBegin}%
  1804. \box#1%
  1805. \pst@Verb{\tx@PutEnd}}}
  1806. \def\tx@PutCoor{PutCoor }
  1807. \def\tx@PutBegin{PutBegin }
  1808. \def\tx@PutEnd{PutEnd }
  1809. \def\begin@psput#1{\begingroup\pst@killglue\leavevmode\pst@ifstar{#1}}%
  1810. \def\end@psput#1(#2){%
  1811. \pst@makebox{%
  1812. \if@star
  1813. \setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}%
  1814. #1(#2)%
  1815. \endgroup
  1816. \ignorespaces}}
  1817. \def\rput{\begin@psput{\pst@getref{\pst@getrputrot{\end@psput\rput@i}}}}
  1818. \def\rput@i(#1){%
  1819. \pst@makesmall\pst@hbox
  1820. \ifx\pst@rot\@empty\else\pst@rotate\pst@hbox\fi
  1821. \psput@{#1}\pst@hbox}
  1822. \def\cput{\def\pst@par{}\pst@object{cput}}
  1823. \def\cput@i{\begingroup\pst@killglue\leavevmode\pst@getrputrot\cput@ii}
  1824. \def\cput@ii(#1){\pst@makebox{\cput@iii{}(#1)}}
  1825. \def\cput@iii#1(#2){%
  1826. \setbox\pst@hbox=\hbox{\psboxsepfalse\pscirclebox@ii{#1}}%
  1827. \let\refpoint@x\relax
  1828. \rput@i(#2)%
  1829. \endgroup
  1830. \ignorespaces}
  1831. \newdimen\pslabelsep
  1832. \def\psset@labelsep#1{\pssetlength\pslabelsep{#1}}
  1833. \psset@labelsep{5pt}
  1834. \def\pst@getrefangle#1\@nil{%
  1835. \def\next##1@#1=##2"##3@##4\@nil{%
  1836. \ifx\relax##2%
  1837. \pst@getangle{#1}\pst@refangle
  1838. \def\pst@uputref{}%
  1839. \else
  1840. \edef\pst@refangle{##2}%
  1841. \edef\pst@uputref{##3}%
  1842. \fi}%
  1843. \expandafter\next\pst@refangletable @#1=\relax"@\@nil}
  1844. \def\pst@refangletable{%
  1845. @r=0"20%
  1846. @u=90"02%
  1847. @l=180"10%
  1848. @d=-90"01%
  1849. @ur=45"22%
  1850. @ul=135"12%
  1851. @dr=-135"21%
  1852. @dl=-45"11}
  1853. \def\uput{\begin@psput{\@ifnextchar[{\uput@ii}{\uput@i}}}
  1854. \def\uput@i#1{\pssetlength\pslabelsep{#1}\uput@ii}
  1855. \def\uput@ii[#1]{%
  1856. \pst@expandafter\pst@getrefangle{#1}\@nil
  1857. \pst@getrputrot{\end@psput\uput@iii}}
  1858. \def\uput@iii(#1){%
  1859. \ifx\pst@uputref\@empty
  1860. \uput@iv\tx@UUput
  1861. \else
  1862. \ifx\pst@rot\@empty
  1863. \expandafter\uput@v\pst@uputref
  1864. \else
  1865. \uput@iv\tx@UUput
  1866. \psput@{#1}\pst@hbox}
  1867. \def\uput@iv#1{%
  1868. \edef\pst@coor{%
  1869. \pst@number\pslabelsep
  1870. \pst@number{\wd\pst@hbox}%
  1871. \pst@number{\ht\pst@hbox}%
  1872. \pst@number{\dp\pst@hbox}%
  1873. \pst@refangle\space \ifx\pst@rot\@empty\else\pst@rot\space sub \fi
  1874. \tx@Uput #1}%
  1875. \setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}%
  1876. \setbox\pst@hbox=\psput@special\pst@hbox
  1877. \ifx\pst@rot\@empty\else\pst@rotate\pst@hbox\fi}
  1878. \def\uput@v#1#2{%
  1879. \ifnum#1>\z@\ifnum#2>\z@\pslabelsep=.707\pslabelsep\fi\fi
  1880. \setbox\pst@hbox=\vbox to\z@{%
  1881. \ifnum#2=1 \vskip\pslabelsep\else\vss\fi
  1882. \hbox to\z@{%
  1883. \ifnum#1=2 \hskip\pslabelsep\else\hss\fi
  1884. \box\pst@hbox
  1885. \ifnum#1=1 \hskip\pslabelsep\else\hss\fi}%
  1886. \ifnum#2=2 \vskip\pslabelsep\else\vss\fi}}
  1887. \def\tx@Uput{Uput }
  1888. \def\tx@UUput{UUput }
  1889. \def\pst@getlabelsep#1{%
  1890. \@ifnextchar[%
  1891. {\def\refpoint@x{.5}\def\refpoint@y{.5}\pst@@getref{#1}}%
  1892. {\pst@@getlabelsep{#1}}}
  1893. \def\pst@@getlabelsep#1#2{\pssetlength\pslabelsep{#2}\pst@getref{#1}}
  1894. \def\Rput{%
  1895. \begin@psput{\pst@getlabelsep{\pst@getrputrot{\end@psput{\Rput@i\rput@i}}}}}
  1896. \def\Rput@i{%
  1897. \pst@dimg=\dp\pst@hbox
  1898. \advance\pst@dimg\pslabelsep
  1899. \dp\pst@hbox=\pst@dimg
  1900. \pst@dimg=\ht\pst@hbox
  1901. \advance\pst@dimg\pslabelsep
  1902. \ht\pst@hbox=\pst@dimg
  1903. \setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}%
  1904. \def\pspicture{\begingroup\pst@ifstar\pst@picture}
  1905. \def\pst@picture{%
  1906. \@ifnextchar[{\pst@@picture}{\pst@@picture[0]}}
  1907. \def\pst@@picture[#1]#2(#3,#4){%
  1908. \@ifnextchar({\pst@@@picture[#1](#3,#4)}%
  1909. {\pst@@@picture[#1](0,0)(#3,#4)}}
  1910. \def\pst@@@picture[#1](#2,#3)(#4,#5){%
  1911. \pssetxlength\pst@dima{#2}\pssetylength\pst@dimb{#3}%
  1912. \pssetxlength\pst@dimc{#4}\pssetylength\pst@dimd{#5}%
  1913. \def\pst@tempa{#1}%
  1914. \setbox\pst@hbox=\hbox\bgroup
  1915. \begingroup\KillGlue
  1916. \@ifundefined{@latexerr}{}{\let\unitlength\psunit}%
  1917. \edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}\ignorespaces}
  1918. \def\pic@coor{(0,0)(0,0)(10,10)}
  1919. \def\endpspicture{%
  1920. \pst@killglue
  1921. \endgroup
  1922. \egroup
  1923. \ifdim\wd\pst@hbox=\z@\else
  1924. \@pstrickserr{Extraneous space in the pspicture environment}%
  1925. {Type \space <return> \space to procede.}%
  1926. \ht\pst@hbox=\pst@dimd
  1927. \dp\pst@hbox=-\pst@dimb
  1928. \setbox\pst@hbox=\hbox{%
  1929. \kern-\pst@dima
  1930. \ifx\pst@tempa\@empty\else
  1931. \advance\pst@dimd-\pst@dimb
  1932. \pst@dimd=\pst@tempa\pst@dimd
  1933. \advance\pst@dimd\pst@dimb
  1934. \lower\pst@dimd
  1935. \box\pst@hbox
  1936. \kern\pst@dimc}%
  1937. \if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi
  1938. \leavevmode\box\pst@hbox
  1939. \endgroup}
  1940. \@namedef{pspicture*}{\pspicture*}
  1941. \@namedef{endpspicture*}{\endpspicture}
  1942. \def\tx@BeginOL{BeginOL }
  1943. \pst@dimg=40in
  1944. \edef\pst@OLunit{\pst@number\pst@dimg}
  1945. \def\tx@InitOL{InitOL }
  1946. \def\pst@initoverlay#1{\pst@Verb{\tx@InitOL /TheOL (#1) def}}
  1947. \def\pst@overlay#1{%
  1948. \edef\curr@overlay{#1}%
  1949. \pst@Verb{(#1) BOL}%
  1950. \aftergroup\pst@endoverlay}
  1951. \def\pst@endoverlay{%
  1952. \pst@Verb{(\curr@overlay) BOL}}
  1953. \def\curr@overlay{all}
  1954. \newbox\theoverlaybox
  1955. \def\overlaybox{%
  1956. \setbox\theoverlaybox=\hbox\bgroup
  1957. \begingroup
  1958. \let\psoverlay\pst@overlay
  1959. \def\overlaybox{%
  1960. \@pstrickserr{Overlays cannot be nested}\@eha}%
  1961. \def\putoverlaybox{%
  1962. \@pstrickserr{You must end the overlay box
  1963. before using \string\putoverlaybox}}%
  1964. \psoverlay{main}}
  1965. \def\endoverlaybox{\endgroup\egroup}
  1966. \def\putoverlaybox#1{%
  1967. \hbox{\pst@initoverlay{#1}\copy\theoverlaybox}}
  1968. \def\psoverlay{\@pstrickserr{\string\psoverlay\space
  1969. can only be used after \string\overlaybox}}
  1970. \ifx\pstcustomize\relax \input pstricks.con \fi
  1971. \catcode`\@=\PstAtCode\relax
  1972. \endinput
  1973. %% END: pstricks.tex
  1974.